如何在自訂類別(Class)中 Dispose時,清除所有的 Event 您所在的位置:网站首页 class 802 如何在自訂類別(Class)中 Dispose時,清除所有的 Event

如何在自訂類別(Class)中 Dispose時,清除所有的 Event

#如何在自訂類別(Class)中 Dispose時,清除所有的 Event| 来源: 网络整理| 查看: 265

感謝各位版大,能檢視我所遇到的問題, 希望有經驗的版大,能指點一二。

.Net 版本:4.0 語言:C#

簡述: 我在自訂一個Class,裡面寫了自訂的Event,以供外部使用(+=)。 我希望能在Dispose時,將這些Evnet清空(-=),以確保物件參考能被釋放,並避免不預期的Event Handle被執行; 當然,我拿不到 Event Handle 的函數名稱(因為是外 部加掛的函數),更何況那可能是匿名函數。

程式碼:(已將無關的Code移除,僅留Event與IDisposable的部份) public class UITabOrderAgent:IDisposable //←自訂的Class {       public class FinishedOrderArgs : EventArgs         {          }

        public delegate void FinishedOrderEventHandler(object sender, FinishedOrderArgs e);         public event FinishedOrderEventHandler FinishedOrder;         private void OnFinishedOrder(FinishedOrderArgs e)         {             FinishedOrderEventHandler handler = FinishedOrder; //所掛事件觸發             if (handler != null)             {                 handler(this, e);             }         }

        private bool disposed = false;         protected virtual void Dispose(bool disposing)         {             if (!this.disposed)             {                 if (disposing)                 {                     // this.FinishedOrder -= XXX;                      // ↑ 我希望在這行清空所有Evnet Handle                 }

                disposed = true;                           }         }         ~UITabOrderAgent()         {             Dispose(false);         }

        public void Dispose()         {             Dispose(true);         }

} -------------------------------------------------------------

public class Form1 : Form //←使用的Form {     private UITabOrderAgent  ResetOrderAgent;

    private void ResetOrderAgent() //重設 UITabOrderAgent,視使用者的操作,此方法可能在Form的生命週期中執行多次     {           ………// 一些判斷式,用來決定參數 UIs 的內容           if (UITabOrderAgent!=null)              UITabOrderAgent.Dispose() //捨棄舊物件

          UITabOrderAgent=new UITabOrderAgent(UIs);//指向新的物件           UITabOrderAgent.FinishedOrder += (object sender, UITabOrderAgent.FinishedOrderArgs e) =>           {                 ......//一些動作           };     } }

---------------------------------------------------------------------

我理解『誰開的資源,誰要負責關』的程式原則, 但我還是希望能簡化 工具Class 的使用方式, 甚至希望設計成 使用者忘了寫 Dispose 時,也不會有嚴重的後遺症, 請各位版大指點一二,感激不盡。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有